package 力扣.中等;

import javax.print.DocFlavor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

/*
* 给定一组非负整数 nums，重新排列它们每位数字的顺序使之组成一个最大的整数。

注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。

 

示例 1：

输入：nums = [10,2]
输出："210"
示例 2：

输入：nums = [3,30,34,5,9]
输出："9534330"
示例 3：

输入：nums = [1]
输出："1"
示例 4：

输入：nums = [10]
输出："10"

* 总结：主要自己写一个比较器new Comparator<String>() 返回1表示置换 返回-1表示部
* 注意比较器中的o1 代表第二个数 o2代表前一个数  比如比较9 15  o1就等于15 o2等于9
*       返回-1表示比较的两个数 交换位置
* 本题要点：1.会写比较器
*         2.转换成字符串来解决
*   //写一个比较器 如果两个数位数相同 就依次比较选择大的
    //如果两个位数不同 先依次比较前面的位数如果都相同 并且到短的数的末尾 就比较短的数末尾的数和另一个数的次一位数
    //这种排序方式就是字典排序 也就是String的compareTo中的排序方法
*
。*/
public class 最大数 {
    public static void main(String[] args) {
        int[] nums={3,30,34,5,9};

            String[] asStrs = new String[nums.length];
            for (int i = 0; i < nums.length; i++) {
                asStrs[i] = String.valueOf(nums[i]);
            }


            Arrays.sort(asStrs, new Comparator<String>() {
                @Override
                public int compare(String a, String b) {
                    String order1 = a + b;
                    String order2 = b + a;

                    return order2.compareTo(order1);
                }
            });


//            if (asStrs[0].equals("0")) {
//                return "0";
//            }

            // Build largest number from sorted array.
            String largestNumberStr = new String();
            for (String numAsStr : asStrs) {
                largestNumberStr += numAsStr;
            }

            System.out.println(largestNumberStr);



    }
}
